#!/bin/bash
#inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]
inofity_path_array=("/data/website/shell/" "/data/website/webtest/")
# thread=(${#inofity_path_array[@]})
thread=1
tmp_fifofile='/tmp/$.fifo'
mkfifo ${tmp_fifofile}
exec 6<>$tmp_fifofile
rm $tmp_fifofile
for((i=0;i<1;i++));
do
 echo
done >&6 # 事实上就是在fd6中放置了$thread个回车符
for ((i=0;i<${#inofity_path_array[@]};i++))
do
  echo ${inofity_path_array[${i}]}
  cd ${inofity_path_array[${i}]}
  # touch ${inofity_path_array[${i}]}123.txt
  read -u6 # 一个read -u6命令执行一次，就从fd6中减去一个回车符，然后向下执行，fd6中没有回车符的时候，就停在这了，从而实现了线程数量控制
  {
    /usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file         # 把监控到有发生更改的"文件路径列表"循环
    do
      INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
      INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
      echo "-------------------------------$(date)------------------------------------"
      echo ${file}
      # 增加、修改、写入完成、移动进事件
      # 增、改放在同一个判断，因为他们都肯定是针对文件的操作，即使是新建目录，要同步的也只是一个空目录，不会影响速度。
      # 判断事件类型
      if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
      then
        echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
      fi
      #删除、移动出事件
      if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
      then
        echo 'DELETE or MOVED_FROM'
      fi
      #修改属性事件 指 touch chgrp chmod chown等操作
      if [[ $INO_EVENT =~ 'ATTRIB' ]]
      then
        echo 'ATTRIB'
      fi
    done
  }
  echo >&6 # 当进程结束以后，再向fd6中加上一个回车符，即补上了read -u6减去的那个
done
wait # 等待所有的后台子进程结束
exec 6>&- # 关闭df6
exit 0
